//
//  main.cpp
//  stack
//
//  Created by chenyh on 2021/2/4.
//

#include <iostream>
#include "Stack.hpp"
using namespace std;
/**
 【例 1-8】设有一个顺序栈 S，元素 s1、s2、s3、s4、s5、
 s6 依次进栈，如果 6 个元素的出栈顺序为 s2、s3、s4、s6、 s5、s1，则顺序栈的容量至少应为多少?
 
 【分析】栈结构的特点是先进后出(FILO)，所以我 们要判断栈的容量的最小值，就是要考虑在最小的空间下 按照栈的先进后出原则，能够输出的元素顺序。由于入栈 操作和出栈操作可以是交叉进行的，所以该题我们可以按 照题目所给的出栈顺序和入栈顺序综合考虑。题目中入栈 是采用的顺序入栈，即 s1 在 s2 前入栈，s2 在 s3 前面入栈， 以次类推。
 图 1-15 运行结果
 第1章 基础数据结构
 (1)第一个输出的元素是 s2，根据入栈顺序，此时已经入栈的元素肯定为 s1 和 s2， 此时栈的容量至少为 2。
 (2)第二个输出元素为 s3，如果容量为 2，并且第一个元素 s2 已经出栈，那么 s3 可 以入栈并立即出栈，此时栈的容量依然为 2。
 (3)s4 出栈，栈容量依然可以为 2。
 (4)第 4 个出栈元素是 s6，由于 s5 在 s6 前面入栈，所以 s6 出栈前栈中元素必须包含 s1、s5 和 s6，此时来看栈的容量至少为 3。
 (5)s5 和 s1 直接出栈。 综上所述，该栈的容量应该是 3。
 */
int main()
 {
    Stack<int> stack;
    int b[]={6,8,15,2,3,1,2};
    for(int i=0;i<7;i++) {
    //设定元素
    cout<<"入栈值:"<<b[i]<<" "; stack.push(b[i]); //入栈 cout<<"当前最小值 min:"<<stack.min()<<endl;
    } cout<<"出栈情况:"<<endl;
    while (!stack.isEmpty()) {
    cout<<"出栈值:"<<" ";
    stack.prinValue();
    cout<<"当前最小值 min:"<<stack.min()<<endl; stack.pop();
    }
 return 0;
 }

/*
int main(int argc, const char * argv[]) {
   
    // 首选按顺序入栈
    Stack<int> s = Stack<int>(6);       //创建栈结构
    int temp = 0;
    //一次入栈
    s.push(23);
    s.push(56);
    s.push(11);
    //要求11先出栈，所以此时弹出11
    temp = s.pop();
    cout<<temp<<"   ";
    s.push(4);
    temp = s.pop();
    cout<<temp<<"   ";
    temp = s.pop();
    cout<<temp<<"   ";
    s.push(87);
    s.push(98);
    temp = s.pop();
    cout<<temp<<"   ";
    temp = s.pop();
    cout<<temp<<"   ";
    temp = s.pop();
    cout<<temp<<"   ";
     
    Stack<int> stack;
    int b[] = {6,8,15,2,3,1,2};
    for (int i = 0; i<7; i++) {
        cout<<"入栈值："<<b[i]<<" ";
        stack.push(b[i]);   //入栈
        cout<<"当前最小值min："<<stack.min()<<endl;
    }
    cout<<"出栈情况："<<endl;
    while (!stack.isEmpty()) {
        cout<<"出栈值:"<<" ";
        stack.prinValue();
        cout<<"当前最小值min："<<stack.min()<<endl;
        stack.pop();
    }
    return 0;
}
 */
